#include "comm_function.h"

void customMessageHandler(QtMsgType type,
                          const QMessageLogContext &context,
                          const QString &msg)
{
    static QMutex mutex;
    mutex.lock(); // 加锁

    QString text;
    switch (type)
    {
    case QtDebugMsg: // 调试信息提示
        text = QString("Debug:");
        break;
    case QtWarningMsg: // 一般告警信息提示
        text = QString("Warning:");
        break;
    case QtCriticalMsg: // 严重错误提示
        text = QString("Critical:");
        break;
    case QtFatalMsg: // 致命错误提示
        text = QString("Fatal:");
        break;
    default:
        text = QString("Debug:");
        break;
    }
    // 设置输出信息格式
    QString context_info = QString("File:(%1) Line:(%2)").arg(QString(context.file), context.line); // 文件名和行数
    QString currentTime = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss ddd");
    QString currentDate = QString("(%1)").arg(currentTime);
    QString message = QString::fromLocal8Bit("[%1] %2 %3 %4").arg(currentDate, text, msg, context_info);
    // 输出信息至文件中（读写、追加形式）
    QString path = QCoreApplication::applicationDirPath();
    QFile file(path + "/log.txt");
//    QString file(QString(QDateTime::currentDateTime().toString("yyyy-MM-dd").append("-log.txt")));
    file.open(QIODevice::ReadWrite | QIODevice::Append);
    QTextStream stream(&file);
    stream << message << "\r\n";
    file.flush();
    file.close();

    mutex.unlock();// 解锁
}
